home *** CD-ROM | disk | FTP | other *** search
/ Floppyshop 2 / Floppyshop - 2.zip / Floppyshop - 2.iso / diskmags / 0022-3.564 / dmg-3323 / protocol.gem / 68000 / cookijar.s < prev    next >
Text File  |  1987-04-21  |  6KB  |  142 lines

  1. *--------------------------------------------------------------------------*
  2. * Fichier "COOKIJAR.S"
  3. * Routine appelée en mode superviseur avec Xbios(38).
  4. * Etant donné que dans le cas d'un tel appel il est quasiment
  5. * impossible de passer des paramétres, cette routine les
  6. * récupère dans COOKIE1, COOKIE2, COOKIE3
  7. * COOKIE1   .L     nom du cookie à chercher 
  8. * COOKIE2   .L     adresse de la boite à gateaux que nous
  9. * proposons au cas ou l'actuelle serait pleine. (0 si nous
  10. * ne voulons pas remplacer la boite).
  11. * COOKIE3   .L     adresse à placer dans la boite, aprés le
  12. * cookie1 s'il est trouvé. 0 pour juste regarder !
  13. * COOKIE4   .W  (0 ou 1)   Si nous trouvons COOKIE1: si COOKIE4 vaut 1,
  14. * il faut imposer COOKIE3 dans le long mot suivant COOKIE1.
  15. * COOKIE2  contient l'adresse de la boite à gateaux, 0 si ne
  16. * l'a pas trouvé ou que sa création est impossible.
  17. * COOKIE3 contient le .L situé aprés le COOKIE1 ou 0 si nous n'avons
  18. * rien trouvé.
  19.  
  20. COOKIE_JAR:
  21.     MOVE.L    $5A0,A1    adresse systéme pour la boite
  22.     CMP.L    #0,A1    il y a déja une boite ?
  23.     BNE.S    BOITE_OK    Oui
  24. * Il n'y a pas de boite à gateaux, nous testons COOKIE2 pour
  25. * savoir si nous devons en placer une.
  26.     TST.L    COOKIE2
  27.     BNE.S    .ICI
  28.     BRA    END_COOKIE
  29. * Il n'y a pas de boite, nous plaçons donc la notre. Par précaution
  30. * notre boite posséde 16 emplacements (contre 8 pour la boite
  31. * d'origine des STE et TT)
  32. .ICI    MOVE.L    COOKIE2,D0
  33.     MOVE.L    D0,$5A0
  34.     MOVE.L    D0,A1    pour la suite
  35. * Notre boite est vide, devons-nous y mettre quelque chose ?
  36.     TST.L    COOKIE3
  37.     BEQ    END_COOKIE    non, donc bye bye
  38.     BRA    FILL_COOKIE   oui donc remplissons
  39. * Nous avons trouvé une boite à gateaux (adr. en A1)
  40. * Suivant COOKIE1, nous devons chercher un  COOKIE ou non.
  41. BOITE_OK    TST.L    COOKIE1    faut-il chercher un gateaux?        
  42.     BEQ    END_COOKIE non, donc bye bye
  43.  
  44. * Bouclons pour chercher si le COOKIE1 est dans la boite...
  45.     MOVEQ    #0,D7        init le compteur de gateaux
  46.     MOVE.L    COOKIE1,D2        valeur à chercher...
  47. MIAM    MOVE.L      (A1)+,D0          Prends un gateaux
  48.             MOVE.L      (A1)+,A0          puis un autre (gourmand!)
  49.             ADDQ.W        #1,D7             compte un couple
  50.             TST.L         D0                Emplacement vide?
  51.             BNE         CMP_COOKIE        non, donc comparons...
  52. * Nous avons trouvé un gateaux vide!!!!! C'est sans doute la fin
  53. * de la liste.... devons nous essayer de déposer dans la boite
  54. * notre COOKIE ou bien dire simplement qu'on a pas trouvé COOKIE1 ?
  55. * Cela dépend de la valeur de COOKIE3!
  56. * ATTENTION, une précaution trés importante!!! Il est tout a fait
  57. * possible qu'un programme ait fabriqué une boite, noté son
  58. * emplacement en 5A0, puis soit parti! L'adresse de la boite
  59. * est donc toujours en 5A0, mais à cette adresse il n'y a plus
  60. * rien!!! On vérifie donc le nombre de slots, nombre qui doit
  61. * étre dans A0!
  62.     CMP.L    #0,A0    il y a des slots?
  63.     BNE    .ICI    oui, c'est ok...
  64. * Cookie vide mais aussi nombre de slot nul, cela veut dire
  65. * que l'adresse trouvée en 5A0 est mauvaise!
  66.     CLR.L    $5A0
  67.     BRA    COOKIE_JAR recommençons tout haut!!!    
  68. .ICI    TST.L    COOKIE3
  69.     BEQ    END_COOKIE    rien à déposer, donc bye bye...
  70. * Nous n'avons pas trouvé notre COOKIE1, nous allons donc le
  71. * placer dans la boite, en le faisant suivre par COOKIE3.
  72. * Mais y-a-t il encore de la place dans la boite ?
  73.     MOVE.L    A0,D0    nombre d'emplacement
  74.     CMP.L    D0,D7    compare aux couples lus
  75. * NOTE: le couple vide est compté comme 1. Si nous trouvons
  76. * dans la boite mention de 8 slots, il n'y en a en fait
  77. * que 7 pour les gateaux puisque le dernier (le huitième)
  78. * indique la fin!
  79.     BEQ    BIG_BOITE il faut faire une boite + grande!    
  80. * Reculons pour placer notre nom de cookie et l'adresse.
  81.     SUBA.L    #8,A1
  82.     MOVE.L    COOKIE1,(A1)+
  83.     MOVE.L    COOKIE3,(A1)+
  84.     MOVE.L    #0,(A1)+    indique fin de liste
  85.     MOVE.L    D0,(A1)+    et nombre de slots
  86.     BRA    END_COOKIE 
  87. * La boite est déja pleine! Nous allons donc
  88. * créer une nouvelle boite, plus grande, transvaser le
  89. * contenu de l'ancienne dans la nouvelle, et y déposer
  90. * notre gateaux, bien confortablement (pas au frais, les gateaux    
  91. * n'aiment pas trop l'humidité).
  92. * Nous avons prévu une nouvelle boite avec 16 emplacements.
  93. * Si l'ancienne contenait déja au moins 16 couples, nous
  94. * abandonnons, car nous n'aurons pas assez de place.
  95. BIG_BOITE    CMP.L    #16,D0
  96.     BHS    NO_BOX
  97.     TST.L    COOKIE2    mettre une boite ?
  98.     BEQ    NO_BOX
  99.     MOVE.L    $5A0,A0    reprend départ de la boite
  100.     MOVE.L    COOKIE2,A1 adr nouvelle boite
  101.     MOVE.L    A1,$5A0    adr. systéme
  102. * -2 pour D7 car nous allons travailler en DBF et en plus
  103. * il ne faut pas recopier le slot vide.
  104.     SUBQ.W    #2,D7
  105.     TST.W    D7    précaution...
  106.     BPL    .HOP    c'est ok!
  107.     MOVE.L    #0,COOKIE2 boite abimée!
  108.     BRA    END_COOKIE    
  109. .HOP    MOVE.L    (A0)+,(A1)+
  110.     MOVE.L    (A0)+,(A1)+
  111.     DBF    D7,.HOP
  112. * La recopie étant faites, plaçons COOKIE1 et COOKIE3
  113. FILL_COOKIE
  114.     MOVE.L    COOKIE1,(A1)+
  115.     MOVE.L    COOKIE3,(A1)+
  116.     MOVE.L    #0,(A1)+    le slot vide
  117.     MOVE.L    #16,(A1)+    et le nombre total de slots
  118.     BRA    END_COOKIE
  119.  
  120. NO_BOX    MOVE.L    #0,COOKIE3     raté, impossible de mettre notre cookie...
  121.     BRA    END_COOKIE
  122.  
  123. * Nous avons trouvé un cookie dans la boite!
  124. * Est-ce celui que nous cherchons ?
  125. CMP_COOKIE    CMP.L    D0,D2   c'est notre gateaux ?
  126.     BNE    MIAM    non, bonne excuse pour en prendre d'autres...
  127. * Nous avons trouvé le gateaux qui est indiqué dans COOKIE1!
  128. * Devons nous simplement noter l'adresse qui suit ou bien
  129. * forcer cette adresse avec la valeur de COOKIE3 ?
  130. * Cela dépend de la valeur de COOKIE4!
  131.     TST.W    COOKIE4    juste prendre l'adresse ?
  132.     BEQ    .LA    oui
  133. * COOKIE4 valant 1, nous devons placer COOKIE3 dans la boite.
  134.     SUBA.L    #4,A1    recule sur le bon endroit
  135.     MOVE.L    COOKIE3,(A1)
  136.     BRA    END_COOKIE    et bye bye...
  137. .LA    MOVE.L    A0,COOKIE3 
  138.  
  139. END_COOKIE    MOVE.L    $5A0,COOKIE2    
  140.     RTS
  141. *--------------------------------------------------------------------------*
  142.